package lab2;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Pai {
	public static void main(String args []){
		BigDecimal pai = BigDecimal.ZERO;
		for (int n=0;n < 10000; ++n) {
			pai = pai.add(calN(n));
		}
		String realPai = "3.141592653589793238462643383279502884197169399375" +
				"1058209749445923078164062862089986280348253421170679";
		System.out.println("理论值："+realPai);
		pai = pai.setScale(100,RoundingMode.DOWN);
		System.out.println("计算值："+pai);
		if (realPai.equals(pai.toString())){
			System.out.println("结果与理论值一致");
		}
	}
	
	public static BigDecimal calN(Integer n) {
		return ((BigDecimal.valueOf(4).divide(BigDecimal.valueOf(8*n+1),100,BigDecimal.ROUND_HALF_UP))
				.subtract(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(8*n+4),100,BigDecimal.ROUND_HALF_UP))
				.subtract(BigDecimal.ONE.divide(BigDecimal.valueOf(8*n+5),100,BigDecimal.ROUND_HALF_UP))
				.subtract(BigDecimal.ONE.divide(BigDecimal.valueOf(8*n+6),100,BigDecimal.ROUND_HALF_UP)))
				.multiply(BigDecimal.ONE.divide(BigDecimal.valueOf(16).pow(n),100,BigDecimal.ROUND_HALF_UP));
//		BigDecimal n1 = BigDecimal.valueOf(4).divide(BigDecimal.valueOf(8*n+1),100,BigDecimal.ROUND_HALF_UP);
//		BigDecimal n2 = BigDecimal.valueOf(2).divide(BigDecimal.valueOf(8*n+4),100,BigDecimal.ROUND_HALF_UP);
//		BigDecimal n3 = BigDecimal.ONE.divide(BigDecimal.valueOf(8*n+5),100,BigDecimal.ROUND_HALF_UP);
//		BigDecimal n4 = BigDecimal.ONE.divide(BigDecimal.valueOf(8*n+6),100,BigDecimal.ROUND_HALF_UP);
//		BigDecimal n5 = BigDecimal.ONE.divide(BigDecimal.valueOf(16).pow(n),100,BigDecimal.ROUND_HALF_UP);
//		BigDecimal n6 = (n1.subtract(n2).subtract(n3).subtract(n4)).multiply(n5);
		//return n6;
	}
}
